package com.cskaoyan._11block._02constructorblock;

/**
 * @description:
 * @author: 景天
 * @date: 2023/2/6 16:32
 **/
/*
构造代码块
    语法:{}
    位置:成员位置
    作用:
        给成员变量赋值用的

给成员赋值的方式:
1.默认赋值
2.显示赋值
3.构造方法赋值
4.构造代码块

研究赋值的顺序:
1.默认赋值永远是第一步
    构造代码块跟显式赋值哪个先执行?
    构造代码块写在上面(构造代码块先执行):--->age=0--->20---->10--->30
    构造代码块写在下面(显式赋值先执行): ---->age=0--->10---->20--->30
    结论:
        构造代码块跟显式赋值谁先执行>>>>写在上面的先执行

4.构造方法赋值永远是最后一步

注意:
    经过反编译操作,构造代码块中的内容被加入到每个构造方法中前面

 */
public class Demo {
    public static void main(String[] args) {
        // 创建学生对象
        Student student = new Student("zs", 30);
        System.out.println("student.age = " + student.age);
        // 无论使用哪个构造方法,构造代码中的内容都会去执行的.
        Student student1 = new Student();
    }
}

class Student{
    // 成员位置

    String name;
    int age = 10;

    {
        // 构造代码块
        // age = 20;
        System.out.println("构造代码块执行了");
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public Student() {
    }
}